package d0626;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import oracle.sql.ROWID;

/**
 *	表的主键值,使用序列生成, 称为自增值  
 */
public class 获取自增值 {
	
	public void add( String dname) throws ClassNotFoundException, SQLException {
		// seq_dept 序列名, 请自行创建序列
		String sql1 = "insert into dept values( seq_dept.nextval,?,null)";

		Class.forName("oracle.jdbc.driver.OracleDriver");

		// 获取连接   本地地址 :  localhost(域名)   127.0.0.1(ip地址)  1521 默认端口
		String url = "jdbc:oracle:thin:@//127.0.0.1:1521/orcl";
		String user = "scott";
		String password = "a";
		Connection conn = DriverManager.getConnection(url, user, password);
		
		/**
		 * 创建语句时, 设置一个返回自增值的参数
		 * RETURN_GENERATED_KEYS 返回自增值
		 */
		// MySQL, SQLServer
		// PreparedStatement ps1 = conn.prepareStatement(sql1,PreparedStatement.RETURN_GENERATED_KEYS);
		// Oracle
		PreparedStatement ps1 = conn.prepareStatement(sql1,new String[] {"deptno"});
		
		ps1.setString(1, dname);
		
		int cnt = ps1.executeUpdate();
		/**
		 * 自增值结果集
		 */
		ResultSet rs = ps1.getGeneratedKeys();
		
		conn.close();
		System.out.println("新增了一个部门:" + cnt);
		
		rs.next();
		// Oracle rowid 伪劣, 也是可以作为主键使用
		//ROWID rowid = (ROWID) rs.getObject(1);
		//System.out.println("刚才新增的部门编号: " + rowid.stringValue());
		int deptno = rs.getInt(1);
		System.out.println("刚才新增的部门编号: " + deptno);
		
	}

}
